#!/usr/bin/env ruby
  
  require 'fox16'
  
  include Fox
  
  class HeaderWindow < FXMainWindow
  
  def create
  super
  show(PLACEMENT_SCREEN)
  end
  
  def initialize(app)
  # Invoke base class initializer first
  super(app, "Header Control Test", :opts => DECOR_ALL, :width => 800, :height => 600)
  
  # Menu bar stretched along the top of the main window
  menubar = FXMenuBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
  
  # Status bar, stretched along the bottom
  FXStatusBar.new(self, LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X)
  
  # File menu
  filemenu = FXMenuPane.new(self)
  FXMenuCommand.new(filemenu, "&Quit\tCtl-Q\tQuit the application", nil,
  getApp(), FXApp::ID_QUIT)
  FXMenuTitle.new(menubar, "&File", nil, filemenu)
  
  # Help menu
  helpmenu = FXMenuPane.new(self)
  FXMenuCommand.new(helpmenu, "&About Header...").connect(SEL_COMMAND) do
  FXMessageBox.information(self, MBOX_OK, "About Header",
  "An example of how to work with the header control.")
  end
  FXMenuTitle.new(menubar, "&Help", nil, helpmenu, LAYOUT_RIGHT)
  
  # Make Main Window contents
  contents = FXVerticalFrame.new(self,
  FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y,
  :padLeft => 0, :padRight => 0, :padTop => 0, :padBottom => 0,
  :hSpacing => 0, :vSpacing => 0)
  
  # Make header control
  @header1 = FXHeader.new(contents,
  :opts => HEADER_BUTTON|HEADER_RESIZE|FRAME_RAISED|FRAME_THICK|LAYOUT_FILL_X)
  @header1.connect(SEL_CHANGED) do |sender, sel, which|
  @lists[which].width = @header1.getItemSize(which)
  end
  @header1.connect(SEL_COMMAND) do |sender, sel, which|
  @lists[which].numItems.times do |i|
  @lists[which].selectItem(i)
  end
  end
  doc=nil
=begin  
  # Document icon
  doc = nil
  File.open(File.join("icons", "minidoc.png"), "rb") do |f|
  doc = FXPNGIcon.new(getApp(), f.read)
  end
=end
  
  @header1.appendItem("Name", doc, 150)
  @header1.appendItem("Type", nil, 140)
  @header1.appendItem("Layout Option", doc, 230)
  @header1.appendItem("Attributes", nil, 80)
  
  # Below header
  panes = FXHorizontalFrame.new(contents,
  FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y,
  :padLeft => 0, :padRight => 0, :padTop => 0, :padBottom => 0,
  :hSpacing => 0, :vSpacing => 0)
  
  # Make 4 lists
  @lists = []
  @lists.push(FXList.new(panes, :opts => LAYOUT_FILL_Y|LAYOUT_FIX_WIDTH|LIST_BROWSESELECT, :width => 150))
  @lists.push(FXList.new(panes, :opts => LAYOUT_FILL_Y|LAYOUT_FIX_WIDTH|LIST_SINGLESELECT, :width => 140))
  @lists.push(FXList.new(panes, :opts => LAYOUT_FILL_Y|LAYOUT_FIX_WIDTH|LIST_MULTIPLESELECT, :width => 230))
  @lists.push(FXList.new(panes, :opts => LAYOUT_FILL_Y|LAYOUT_FIX_WIDTH|LIST_EXTENDEDSELECT, :width => 80))
  
  @lists[0].backColor = FXRGB(255, 240, 240)
  @lists[1].backColor = FXRGB(240, 255, 240)
  @lists[2].backColor = FXRGB(240, 240, 255)
  @lists[3].backColor = FXRGB(255, 255, 240)
  
  # Add some contents
  @lists[0].appendItem("Matsumoto Yukihiro")
  @lists[0].appendItem("Jeroen van der Zijp")
  @lists[0].appendItem("Lyle Johnson")
  @lists[0].appendItem("Andy Hunt")
  @lists[0].appendItem("Dave Thomas")
  @lists[0].appendItem("Charles Warren")
  
  @lists[1].appendItem("Father of Ruby")
  @lists[1].appendItem("Incorrigible Hacker")
  @lists[1].appendItem("Windows Hacker")
  @lists[1].appendItem("Pragmatic Hacker")
  @lists[1].appendItem("Ruby Hacker")
  @lists[1].appendItem("Shutter Hacker")
  
  @lists[2].appendItem("LAYOUT_FILL_X|LAYOUT_FILL_Y")
  @lists[2].appendItem("LAYOUT_FILL_Y")
  @lists[2].appendItem("LAYOUT_NORMAL")
  @lists[2].appendItem("LAYOUT_NORMAL")
  @lists[2].appendItem("LAYOUT_NORMAL")
  @lists[2].appendItem("LAYOUT_NORMAL")
  
  @lists[3].appendItem("A")
  @lists[3].appendItem("B")
  @lists[3].appendItem("C")
  @lists[3].appendItem("D")
  @lists[3].appendItem("E")
  @lists[3].appendItem("F")
  
  @header2 = FXHeader.new(panes,
  :opts => HEADER_VERTICAL|HEADER_BUTTON|HEADER_RESIZE|FRAME_RAISED|FRAME_THICK|LAYOUT_FILL_Y)
  @header2.appendItem("Example", nil, 30)
  @header2.appendItem("Of", nil, 30)
  @header2.appendItem("Vertical", nil, 30)
  @header2.appendItem("Header", nil, 30)
  
  # Group box with some controls
  groupie = FXGroupBox.new(panes, "Controls",
  GROUPBOX_TITLE_CENTER|LAYOUT_FILL_X|LAYOUT_FILL_Y)
  check = FXCheckButton.new(groupie,
  "Continuous Tracking\tContinuous\tTrack Header continuously",
  :opts => ICON_BEFORE_TEXT|LAYOUT_SIDE_TOP)
  check.connect(SEL_COMMAND) do
  @header1.headerStyle ^= HEADER_TRACKING
  @header2.headerStyle ^= HEADER_TRACKING
  end
  
  # Whip out a tooltip control, jeez, that's hard
  FXToolTip.new(getApp())
  end
  end
  
  if __FILE__ == $0
  # Construct a FOX application object
  application = FXApp.new("Header", "FoxTest")
  
  # Construct the main window
  HeaderWindow.new(application)
  
  # Create all the windows
  application.create
  
  # Run the application
  application.run
  end